
package Datos;

import Negocio.Prenda;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;
import java.util.ArrayList;


public class PrendaDB {
    public boolean grabar(Prenda prenda) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "insert into prenda(descripcion, fecha_adquisicion, num_usos, codigo_foto, " +
                "es_usado, genero, id_tipo, num_usos_total, en_lavanderia, color) " +
                "values('"+prenda.getDescripcion()+"', '"+prenda.getFecha_adquisicion()+"', " + 
                prenda.getNumero_usos() +", "+prenda.getFoto().getCodigo() +", "+prenda.isEs_usado() +", "+prenda.getGenero()+ ", "+
                prenda.getId_tipo()+", "+prenda.getNum_usos_total()+", "+prenda.isEn_lavanderia()+", "+prenda.getColor()+")";
        Boolean resultado = db.ingreso(query);
        db.cerrarConexion();
        return resultado;
    } 
    /*
    public int modificar(int id) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query="update prenda set calificacion='" + id.getNombre() + "', apellido=" + id.getApellido()  + "', apodo=" + id.getApodo() + ", codig_foto ="  + id.getMifoto().getCodigo() + "', fecha_nacimiento=" + id.getFecha_nacimiento()  + "', contraseña=" + id.getContraseña() +  " where cedula=" + id.getCedula();
        int resultado = db.modificacioneliminacion(query);
        db.cerrarConexion();
        return resultado;
    }*/
    
    public int eliminar(int codigo) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query="delete from prenda where codigo =" + codigo;
        int resultado = db.modificacioneliminacion(query);
        db.cerrarConexion();
        return resultado;
    }
    
    
    public Prenda buscar(int id) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query="select codigo, descripcion, fecha_adquisicion, num_usos_total from prenda where codigo =" + id;        
        ResultSet resultado = db.seleccion(query);
        Prenda prenda=null;
        if (resultado!=null) {
            resultado.next();
            prenda = new Prenda();
            prenda.setCodigo(resultado.getInt("codigo"));           
            prenda.setDescripcion(resultado.getString("descripcion"));
            prenda.setFecha_adquisicion(resultado.getString("fecha_adquisicion"));
            prenda.setNum_usos_total(resultado.getInt("num_usos_total"));
        } 
        db.cerrarConexion();
        return prenda;        
    }
    
    public Prenda buscarCodigo(String cedula, int codigo) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query="{ ? = call buscarprendacodigo('"+cedula+"', "+codigo+") }";
        Connection var= db.db.getConnection();
        CallableStatement stmt = var.prepareCall(query);
        stmt.registerOutParameter(1, Types.OTHER);
        ResultSet resultado = db.callProcedure(stmt);
        Prenda prenda=null;
        if (resultado!=null) {
            resultado.next();
            prenda = new Prenda();
            prenda.setCodigo(resultado.getInt("codigo")); 
            prenda.setDescripcion(resultado.getString("descripcion"));
            prenda.setFecha_adquisicion(resultado.getString("fecha_adquisicion"));
            prenda.setColor(resultado.getString("color"));
            prenda.setNum_usos_total(resultado.getInt("num_usos_total"));
        } 
        db.cerrarConexion();
        return prenda;        
    }    
    
    public Prenda buscarDescripcion(String cedula, String descripcion) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query="{ ? = call buscarprendadescripcion('"+cedula+"', '"+descripcion+"') }";
        Connection var= db.db.getConnection();
        CallableStatement stmt = var.prepareCall(query);
        stmt.registerOutParameter(1, Types.OTHER);
        ResultSet resultado = db.callProcedure(stmt);
        Prenda prenda=null;
        if (resultado!=null) {
            resultado.next();
            prenda = new Prenda();
            prenda.setCodigo(resultado.getInt("codigo")); 
            prenda.setDescripcion(resultado.getString("descripcion"));
            prenda.setFecha_adquisicion(resultado.getString("fecha_adquisicion"));
            prenda.setColor(resultado.getString("color"));
            prenda.setNum_usos_total(resultado.getInt("num_usos_total"));
        } 
        db.cerrarConexion();
        return prenda;        
    } 
    
    public Prenda buscarFechaAdqui(String cedula, String fechaAdqui) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query="{ ? = call buscarprendafechaadqui('"+cedula+"', '"+fechaAdqui+"') }";
        Connection var= db.db.getConnection();
        CallableStatement stmt = var.prepareCall(query);
        stmt.registerOutParameter(1, Types.OTHER);
        ResultSet resultado = db.callProcedure(stmt);
        Prenda prenda=null;
        if (resultado!=null) {
            resultado.next();
            prenda = new Prenda();
            prenda.setCodigo(resultado.getInt("codigo")); 
            prenda.setDescripcion(resultado.getString("descripcion"));
            prenda.setFecha_adquisicion(resultado.getString("fecha_adquisicion"));
            prenda.setColor(resultado.getString("color"));
            prenda.setNum_usos_total(resultado.getInt("num_usos_total"));
        } 
        db.cerrarConexion();
        return prenda;        
    }
    
    public ArrayList listar(int id) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query="select codigo, descripcion, fecha_adquisicion, num_usos_total from prenda where codigo = "+ id;
        ResultSet resultado = db.seleccion(query);
        Prenda prenda=null;
        ArrayList todos=new ArrayList();
        while (resultado.next()) {
            prenda = new Prenda();
            prenda.setCodigo(resultado.getInt(1));           
            prenda.setDescripcion(resultado.getString(2));
            prenda.setFecha_adquisicion(resultado.getString(3));
            prenda.setNum_usos_total(resultado.getInt(4));
            todos.add(prenda);
        }
        db.cerrarConexion();
        return todos;
    }
    
    
 public ArrayList listarConDefecto(String cedula) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query="{ ? = call buscarPrendaConDefectos('"+cedula+"') }";
        Connection var= db.db.getConnection();
        CallableStatement stmt = var.prepareCall(query);
        stmt.registerOutParameter(1, Types.OTHER);
        ResultSet resultado = db.callProcedure(stmt);
        Prenda prenda=null;
        ArrayList todos=new ArrayList();
        while (resultado.next()) {
            prenda = new Prenda();
            prenda.setCodigo(resultado.getInt(1));
            prenda.setDescripcion(resultado.getString(2));
            prenda.setFecha_adquisicion(resultado.getString(3));
            prenda.setColor(resultado.getString(4));
            prenda.setNum_usos_total(resultado.getInt(5));
            todos.add(prenda);
        } 
        db.cerrarConexion();
        return todos;        
    }
 
  public ArrayList listarCompartidas(String cedula) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query="{ ? = call buscarPrendaPrestada('"+cedula+"') }";
        Connection var= db.db.getConnection();
        CallableStatement stmt = var.prepareCall(query);
        stmt.registerOutParameter(1, Types.OTHER);
        ResultSet resultado = db.callProcedure(stmt);
        Prenda prenda=null;
        ArrayList todos=new ArrayList();
        while (resultado.next()) {
            prenda = new Prenda();
            prenda.setCodigo(resultado.getInt(1));
            prenda.setDescripcion(resultado.getString(2));
            prenda.setFecha_adquisicion(resultado.getString(3));
            prenda.setColor(resultado.getString(4));
            prenda.setNum_usos_total(resultado.getInt(5));
            todos.add(prenda);
        } 
        db.cerrarConexion();
        return todos;        
    }
  
  
  public ArrayList listarIndividuales(String cedula) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query="{ ? = call buscarPrendaIndividual('"+cedula+"') }";
        Connection var= db.db.getConnection();
        CallableStatement stmt = var.prepareCall(query);
        stmt.registerOutParameter(1, Types.OTHER);
        ResultSet resultado = db.callProcedure(stmt);
        Prenda prenda=null;
        ArrayList todos=new ArrayList();
        while (resultado.next()) {
            prenda = new Prenda();
            prenda.setCodigo(resultado.getInt(1));
            prenda.setDescripcion(resultado.getString(2));
            prenda.setFecha_adquisicion(resultado.getString(3));
            prenda.setColor(resultado.getString(4));
            prenda.setNum_usos_total(resultado.getInt(5));
            todos.add(prenda);
        } 
        db.cerrarConexion();
        return todos;        
    }
    
 public ArrayList listarSinDefecto(String cedula) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query="{ ? = call buscarPrendaSinDefectos('"+cedula+"') }";
        Connection var= db.db.getConnection();
        CallableStatement stmt = var.prepareCall(query);
        stmt.registerOutParameter(1, Types.OTHER);
        ResultSet resultado = db.callProcedure(stmt);
        Prenda prenda=null;
        ArrayList todos=new ArrayList();
        while (resultado.next()) {
            prenda = new Prenda();
            prenda.setCodigo(resultado.getInt(1));
            prenda.setDescripcion(resultado.getString(2));
            prenda.setFecha_adquisicion(resultado.getString(3));
            prenda.setColor(resultado.getString(4));
            prenda.setNum_usos_total(resultado.getInt(5));
            todos.add(prenda);
        } 
        db.cerrarConexion();
        return todos;        
    }
 
 
     
    public ArrayList listarClasificacion(String cedula, int id) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query="{ ? = call buscarprendaclasificacion('"+cedula+"', '"+id+"') }";
        Connection var= db.db.getConnection();
        CallableStatement stmt = var.prepareCall(query);
        stmt.registerOutParameter(1, Types.OTHER);
        ResultSet resultado = db.callProcedure(stmt);
        Prenda prenda=null;
        ArrayList todos=new ArrayList();
        while (resultado.next()) {
            prenda = new Prenda();
            prenda.setCodigo(resultado.getInt(1));
            prenda.setDescripcion(resultado.getString(2));
            prenda.setFecha_adquisicion(resultado.getString(3));
            prenda.setColor(resultado.getString(4));
            prenda.setNum_usos_total(resultado.getInt(5));
            todos.add(prenda);
        } 
        db.cerrarConexion();
        return todos;        
    }
    
    public ArrayList listarRangoFechas(String cedula, String fechaInicio, String fechaFin) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query="{ ? = call buscarprendafecha('"+cedula+"', '"+fechaInicio+"', '"+fechaFin+"') }";
        Connection var= db.db.getConnection();
        CallableStatement stmt = var.prepareCall(query);
        stmt.registerOutParameter(1, Types.OTHER);
        ResultSet resultado = db.callProcedure(stmt);
        Prenda prenda=null;
        ArrayList todos=new ArrayList();
        while (resultado.next()) {
            prenda = new Prenda();
            prenda.setCodigo(resultado.getInt(1));
            prenda.setDescripcion(resultado.getString(2));
            prenda.setFecha_adquisicion(resultado.getString(3));
            prenda.setColor(resultado.getString(4));
            prenda.setNum_usos_total(resultado.getInt(5));
            todos.add(prenda);
        } 
        db.cerrarConexion();
        return todos;        
    }
    
    public ArrayList listarMasUsados(String cedula) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query="{ ? = call buscarprendamasusada('"+cedula+"') }";
        Connection var= db.db.getConnection();
        CallableStatement stmt = var.prepareCall(query);
        stmt.registerOutParameter(1, Types.OTHER);
        ResultSet resultado = db.callProcedure(stmt);
        Prenda prenda=null;
        ArrayList todos=new ArrayList();
        while (resultado.next()) {
            prenda = new Prenda();
            prenda.setCodigo(resultado.getInt(1));
            prenda.setDescripcion(resultado.getString(2));
            prenda.setFecha_adquisicion(resultado.getString(3));
            prenda.setColor(resultado.getString(4));
            prenda.setNum_usos_total(resultado.getInt(5));
            todos.add(prenda);
        } 
        db.cerrarConexion();
        return todos;        
    }
    
     public ArrayList listarMenosUsados(String cedula) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query="{ ? = call buscarprendamenosusada('"+cedula+"') }";
        Connection var= db.db.getConnection();
        CallableStatement stmt = var.prepareCall(query);
        stmt.registerOutParameter(1, Types.OTHER);
        ResultSet resultado = db.callProcedure(stmt);
        Prenda prenda=null;
        ArrayList todos=new ArrayList();
        while (resultado.next()) {
            prenda = new Prenda();
            prenda.setCodigo(resultado.getInt(1));
            prenda.setDescripcion(resultado.getString(2));
            prenda.setFecha_adquisicion(resultado.getString(3));
            prenda.setColor(resultado.getString(4));
            prenda.setNum_usos_total(resultado.getInt(5));
            todos.add(prenda);
        } 
        db.cerrarConexion();
        return todos;        
    }
    
    public ArrayList listarCodigo(String cedula, int codigo) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query="{ ? = call buscarprendacodigo('"+cedula+"', +"+codigo+") }";
        Connection var= db.db.getConnection();
        CallableStatement stmt = var.prepareCall(query);
        stmt.registerOutParameter(1, Types.OTHER);
        ResultSet resultado = db.callProcedure(stmt);
        Prenda prenda=null;
        ArrayList todos=new ArrayList();
        while (resultado.next()) {
            prenda = new Prenda();
            prenda.setCodigo(resultado.getInt(1));
            prenda.setDescripcion(resultado.getString(2));
            prenda.setFecha_adquisicion(resultado.getString(3));
            prenda.setColor(resultado.getString(4));
            prenda.setNum_usos_total(resultado.getInt(5));
            todos.add(prenda);
        }
        db.cerrarConexion();
        return todos;
    }
}

/*prenda.setDescripcion(resultado.getString(1));
            prenda.setFecha_adquisicion(resultado.getString(2));
            prenda.setNumero_usos(resultado.getInt(3));
            prenda.setFoto(foto);
            foto.setCodigo(resultado.getInt(4));
            prenda.setEs_usado(resultado.getBoolean(5));
            prenda.setCodigo(resultado.getInt(6));
            genero.setId(resultado.getInt(7));
            prenda.setGenero(genero);            
            prenda.setNum_lavadas(resultado.getInt(8));             
            tipo.setId(resultado.getInt(9));
            prenda.setId_tipo(tipo); 
            prenda.setNum_usos_total(resultado.getInt(10));
            prenda.setEn_lavanderia(resultado.getBoolean(11));
            prenda.setColor(resultado.getString(12));*/